﻿Imports DTO
Imports System.Data.SqlClient

Public Class TipoPagamentoDAL

#Region "Métodos"
    ''' <summary>
    ''' Método responsável incluir um tipo de pagamento na base de dados
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Incluir(tipoPagamento As TipoPagamentoDTO)
        Dim strSql As String
        Using conn As New SqlConnection(My.Settings.Conexao)

            'Cria a string de execução da procedure
            strSql = "EXEC PR_INSERIR_TIPOPAGAMENTO " & _
                     " @Nome, @Descricao"

            Using cmd As New SqlCommand(strSql, conn)
                Try
                    'Cria os parâmetros de execução
                    cmd.Parameters.Add("@Nome", SqlDbType.VarChar, 50).Value = tipoPagamento.pNome
                    cmd.Parameters.Add("@Descricao", SqlDbType.VarChar, 200).Value = tipoPagamento.pDescricao

                    conn.Open() 'Abrir a conexao
                    cmd.ExecuteNonQuery() 'Executa o SQL

                Catch ex As SqlException
                    'Erro nº 2627 do SQLException indica chave primaria duplicada
                    If ex.Number = 2627 Then
                        Throw New Exception("Já existe um tipo de pagamento cadastrado!")
                    Else
                        Throw ex
                    End If
                Catch ex As Exception
                    Throw ex
                End Try
            End Using
        End Using
    End Sub

    ''' <summary>
    ''' Método utilizado para alterar um determinado tipo de pagamento através de seu código
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Alterar(tipoPagamento As TipoPagamentoDTO)
        Dim strSql As String
        Using conn As New SqlConnection(My.Settings.Conexao)

            'Cria a string de execução da procedure
            strSql = "EXEC PR_ALTERAR_TIPOPAGAMENTO" & _
                     " @codigo, @Nome, @Descricao"

            Using cmd As New SqlCommand(strSql, conn)
                Try
                    'Cria os parâmetros de execução
                    cmd.Parameters.Add("@Codigo", SqlDbType.Int).Value = tipoPagamento.pCodigo
                    cmd.Parameters.Add("@Nome", SqlDbType.VarChar, 50).Value = tipoPagamento.pNome
                    cmd.Parameters.Add("@Descricao", SqlDbType.VarChar, 200).Value = tipoPagamento.pDescricao

                    conn.Open() 'Abrir a conexao
                    cmd.ExecuteNonQuery() 'Executa o SQL

                Catch ex As Exception
                    Throw ex
                End Try
            End Using
        End Using
    End Sub

    ''' <summary>
    ''' Método utilizado para excluir o tipo de pagamento passando como parâmetro o código
    ''' </summary>
    ''' <param name="codigo"></param>
    ''' <remarks></remarks>
    Public Sub Excluir(codigo As Integer)
        Dim strSql As String
        Using conn As New SqlConnection(My.Settings.Conexao)

            'Cria a string de execução da procedure
            strSql = "EXEC PR_EXCLUIR_TIPOPAGAMENTO " & _
                     " @Codigo"

            Using cmd As New SqlCommand(strSql, conn)
                Try
                    'Cria os parâmetros de execução
                    cmd.Parameters.Add("@Codigo", SqlDbType.Int).Value = codigo

                    conn.Open() 'Abrir a conexao
                    cmd.ExecuteNonQuery() 'Executa o SQL

                Catch ex As Exception
                    Throw ex
                End Try
            End Using
        End Using
    End Sub

    ''' <summary>
    ''' Método responsável por listar tipos de pagamento ativos
    ''' </summary>
    ''' <param name="Nome"></param>
    ''' <remarks></remarks>
    Public Function Consultar(Nome As String) As TipoPagamentoDTO
        Dim reader As SqlDataReader
        Dim strSql As String
        Dim objTipoPagamento As New TipoPagamentoDTO
        Try
            Using conn As New SqlConnection(My.Settings.Conexao)
                strSql = "SELECT * FROM TIPOPAGAMENTO WHERE Nome like '@Nome%' AND Ativo=1"
                Using cmd As New SqlCommand(strSql, conn)
                    cmd.Parameters.Add("@Nome", SqlDbType.VarChar, 50).Value = Nome

                    conn.Open()
                    reader = cmd.ExecuteReader

                    'Se ele encontrou algum registro, preenche o objeto
                    If reader.Read() Then
                        objTipoPagamento.pCodigo = reader.Item("Codigo")
                        objTipoPagamento.pNome = reader.Item("Nome")
                        objTipoPagamento.pDescricao = reader.Item("Descricao")
                    End If
                    reader.Close()

                End Using
            End Using
            Return objTipoPagamento
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    ''' <summary>
    ''' Método responsável por listar todos os tipos de pagamento existentes e ativos
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function Listar() As List(Of TipoPagamentoDTO)
        Dim strSQL As String
        Dim reader As SqlDataReader
        Dim objTipoPagamento As TipoPagamentoDTO
        Dim listaTipoPagamento As New List(Of TipoPagamentoDTO)


        Using conn As New SqlConnection(My.Settings.Conexao)
            'conn.ConnectionString = My.Settings.StringConexao
            strSQL = "SELECT * FROM TipoPagamento WHERE Ativo=1"

            Using cmd As New SqlCommand(strSQL, conn)
                Try
                    'Cria parâmetro

                    conn.Open() 'Abre conexão

                    reader = cmd.ExecuteReader

                    Do While reader.Read
                        'Instacia um novo objeto clsCliente e preenche este obj com info do bd
                        objTipoPagamento = New TipoPagamentoDTO

                        With objTipoPagamento
                            .pCodigo = reader.Item("Codigo")
                            .pNome = reader.Item("Nome")
                            .pDescricao = reader.Item("Descricao")
                        End With

                        'adicionar na lista
                        listaTipoPagamento.Add(objTipoPagamento)

                    Loop
                    'fecha o cursos
                    reader.Close()

                    Return listaTipoPagamento

                Catch ex As Exception
                    Throw ex
                End Try
            End Using
        End Using
    End Function
#End Region

End Class
